草庐IT

C++ 链表行为

全部标签

C++ 类设计为每个不同的行为提供多个接口(interface)

这是我的第一篇文章,所以请善待。这是我最近得到的一个面试问题,但我在搜索(google、C++FAQ等)后找不到答案。有一个行为b1()的接口(interface)I1。有3个类A,B,C。所有这些类都通过覆盖b1()来实现接口(interface)I1。有第四个类D,它具有在接口(interface)I1中定义的行为(b1)和一个额外的行为b2问题是你如何设计D类。我的答案是创建另一个接口(interface)I2,它定义行为b2()并通过覆盖b1()和b2()使类D实现I1和I2(C++中的多重继承)面试官同意这个解决方案,但问如果将来出现具有新行为的新类(class),我们将如何

c++ - 未命名对象的 RVO(返回值优化)是否是普遍保证的行为?

Thisquestion在不同方面(也仅限于gcc)。我的问题仅适用于未命名对象。ReturnValueOptimization被允许改变结果程序的可观察行为。标准中似乎也提到了这一点。但是,这个“允许”术语令人困惑。这是否意味着RVO保证在每个编译器上发生。由于RVO下面的代码改变了它的可观察行为:#includeintglobal=0;structA{A(int*p){}A(constA&obj){++global;}};Afoo(){returnA(0);}//这个程序是否应该为所有实现打印global=0,而不考虑编译器优化和foo的方法大小? 最佳

c++ - 如果表达式的中间结果溢出,是否是未定义行为?

这个问题是另一个SOquestion的结果.示例代码#includeintmain(){unsignedlongb=35000000;inti=100;intj=30000000;unsignedlongn=(i*j)/b;//#1unsignedlongm=(100*30000000)/b;//#2std::cout输出8585使用g++-std=c++11-Wall-pedantic-O0-Wextra编译此代码会给出以下警告:9:28:警告:表达式[-Woverflow]中的整数溢出问题我认为#1和#2调用未定义行为是否正确,因为中间结果100*30000000没有适合int?还

c++ - 双向链表 : Unresolved Externals

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whycantemplatesonlybeimplementedintheheaderfile?Whatisanundefinedreference/unresolvedexternalsymbolerrorandhowdoIfixit?同样,这是一项家庭作业,我的导师给了我们很多反馈,但我仍然对这个编译问题一头雾水。当我将main函数放在实现文件中时,程序会编译并完美运行。但是,当我将main函数放入main.cpp时,编译器会提示:unresolvedexternalsymbol"public:__thi

c++ - 对象数组的默认复制行为

如果我有一个以数组作为成员的类:classA{Objectarray[SIZE];};然后我复制它的一个实例:Aa;Ab=a;Ac;c=a;array是逐字节memcpy还是Object::operator=逐元素复制? 最佳答案 C++中的数组对于所有一等对象都表现良好,包括用户定义的类型(无论它们是否是POD/非平凡可构造的)。#includestructObject{Object(){puts("Object");}Object(Objectconst&){puts("copy");}~Object(){puts("~Obje

c++ - std::string s() 奇怪的行为

这个问题在这里已经有了答案:Whyistherenocalltotheconstructor?[duplicate](3个答案)关闭9年前。我发现了一些我不明白的奇怪东西。std::stringa();打印出来时返回1。我不知道它是从哪里来的。我认为a()是一个没有参数的构造函数,但看起来它不是。我在哪里可以找到这方面的信息?这是什么?当尝试执行std::stringb(a);时,编译器会提示:error:nomatchingfunctionforcallto‘std::basic_string::basic_string(std::string(&)())’解释将不胜感激。

c++ - 如何自定义未捕获的异常终止行为?

在g++和clang++中(至少在Linux中)在抛出异常但未捕获异常(未捕获的异常)后显示以下典型消息:terminatecalledafterthrowinganinstanceof'std::runtime_error'what():Bye例如:#includeintmain(){throwstd::runtime_error("Bye");}如何自定义错误消息,同时仍然可以完全访问抛出的异常?文档(http://www.cplusplus.com/reference/exception/set_unexpected/)提到了set_unexpected(和set_termina

c++ - 在链表的某个位置插入节点C++

我想在某个位置插入一个节点。在我的代码中,仅插入位置为1的数字(基本上在链表的开头)并且它没有插入位置为2的任何数据。temp2有问题吗?当我运行程序时,它没有指向我认为的任何东西。我知道你们有多讨厌在这里问家庭作业问题,但我只是不知道我的程序有什么问题。我只是一个初学者,我的老师没有很好地解释链表。代码如下。-我得到的输出是87-我希望它显示为8675,其中6和5插入位置2/*Insertnodeatagivenpositoninalinkedlist.Firstelementinthelinkedlistisatposition0*/#include#includestructNo

C++缓存性能奇怪的行为

我读了一篇文章(1.5岁的http://www.drdobbs.com/parallel/cache-friendly-code-solving-manycores-ne/240012736),其中谈到了缓存性能和数据大小。他们显示了以下代码,他们说它们在i7(桑迪桥)上运行staticvolatileintarray[Size];staticvoidtest_function(void){for(inti=0;i他们声称,如果保持Size*Iterations不变,则增加Size,当数组内存的大小增加到超过L2高速缓存大小时,它们会观察到执行所需的巨大时间高峰(10x)。作为我自己的

【代码随想录-链表】反转链表

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kwan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术点,如集合,jvm,并发编程redis,kafka,Spring,微服务,Netty等常用开发工具系列:罗列常用的开发工具,如IDEA,Mac,Alfred,electerm,Git,typora,apifox等数据库系列:详细总结了常用数据库mysql技术点,以及工作中遇到的mysql问题等懒人运维系列:总结好用的命令,解放双手